/*
 * Copyright (c) 2025 CAX Conversion Project
 */
package com.comac.ins.common.log.annotation;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * 摘要日志
 *
 * @author zhanghongyi
 * @date 2024 /6/20 13:22
 * @description Digest
 */
@Target({ElementType.PARAMETER, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface Digest {

    /**
     * 业务类型标识
     * 用于区分日志记录的格式和归属对象，以便于根据不同标识解析日志
     *
     * @return 业务类型标识（如果没填则使用方法名作为标识）
     */
    String bizType() default "";

    /**
     * 摘要记录的字段列表
     * 字可选段变量包含：方法各形参名，返回值（固定为RET）
     * 如果字段变量为复杂对象,支持使用点号表达式“a.property.property”（spel语法）进行深层读取。
     * 例如com.comac.software.in.comm.eicd.common.domain.R,返回值的获取方式为：RET?.code
     * 这里使用?.是为了避免空指针，当前边的表达式为null时不是抛出空指针异常，而是返回null。
     * 更多SPel语法参见：https://blog.csdn.net/A_art_xiang/article/details/134370029
     * */
    String[] logFields() default {};
}
